// message.js
const request = require('../../utils/request')
const app = getApp()

Page({
  data: {
    doctorInfo: null,
    messageTitle: '',
    messageContent: '',
    uploadImages: []
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 获取医生ID
    const doctorId = options.doctorId
    if (!doctorId) {
      wx.showToast({
        title: '医生ID不存在',
        icon: 'none'
      })
      setTimeout(() => {
        wx.navigateBack()
      }, 1500)
      return
    }

    // 获取医生信息
    this.getDoctorInfo(doctorId)
  },

  /**
   * 获取医生信息
   */
  getDoctorInfo(doctorId) {
    console.log('获取医生信息, ID:', doctorId)
    
    // 直接指定ID参数，避免key搜索可能带来的匹配问题
    const params = { id: doctorId }
    
    request.get('/student/doctor/getInfo', params, true)
      .then(res => {
        console.log('医生信息接口返回:', res)
        
        if (res.code === 0 && res.data) {
          // 获取医生信息
          let doctor = null
          
          // 如果返回数组，尝试查找匹配的医生
          if (Array.isArray(res.data)) {
            // 尝试精确匹配ID
            doctor = res.data.find(item => String(item.id) === String(doctorId))
            
            // 如果没找到但有数据，取第一个
            if (!doctor && res.data.length > 0) {
              doctor = res.data[0]
            }
          } else if (typeof res.data === 'object') {
            // 如果直接返回单个对象
            doctor = res.data
          }
          
          if (doctor) {
            console.log('找到医生信息:', doctor)
            // 格式化医生信息
            this.setData({
              doctorInfo: {
                id: doctor.id,
                name: doctor.doctorname || doctor.username,
                username: doctor.username,
                avatar: doctor.image,
                deptName: doctor.kezhen || '未分类',
                hospitalName: doctor.hospital || '未知医院',
                introduction: doctor.content || '',
                email: doctor.email || '',
                phone: doctor.phone || '',
                address: doctor.address || '',
                sex: doctor.sex || '',
                status: doctor.state === 1 ? 1 : 0
              }
            })
          } else {
            console.error('未找到医生信息')
            wx.showToast({
              title: '未找到医生信息',
              icon: 'none'
            })
          }
        } else {
          console.error('获取医生信息失败', res)
          wx.showToast({
            title: res.message || '获取医生信息失败',
            icon: 'none'
          })
        }
      })
      .catch(err => {
        console.error('获取医生信息失败', err)
        wx.showToast({
          title: '获取医生信息失败',
          icon: 'none'
        })
      })
  },

  /**
   * 输入留言标题
   */
  inputMessageTitle(e) {
    this.setData({
      messageTitle: e.detail.value
    })
  },
  
  /**
   * 输入留言内容
   */
  inputMessageContent(e) {
    this.setData({
      messageContent: e.detail.value
    })
  },
  
  /**
   * 选择图片
   */
  chooseImage() {
    const that = this
    wx.chooseImage({
      count: 9 - that.data.uploadImages.length,
      sizeType: ['compressed'],
      sourceType: ['album', 'camera'],
      success: function(res) {
        // 追加图片
        that.setData({
          uploadImages: [...that.data.uploadImages, ...res.tempFilePaths]
        })
      }
    })
  },
  
  /**
   * 预览图片
   */
  previewImage(e) {
    const current = e.currentTarget.dataset.src
    wx.previewImage({
      current: current,
      urls: this.data.uploadImages
    })
  },
  
  /**
   * 删除图片
   */
  deleteImage(e) {
    const index = e.currentTarget.dataset.index
    const newImages = [...this.data.uploadImages]
    newImages.splice(index, 1)
    this.setData({
      uploadImages: newImages
    })
  },
  
  /**
   * 提交留言
   */
  submitMessage() {
    // 验证表单
    if (!this.data.messageTitle.trim()) {
      wx.showToast({
        title: '请输入病情标题',
        icon: 'none'
      })
      return
    }
    
    if (!this.data.messageContent.trim()) {
      wx.showToast({
        title: '请输入病情描述',
        icon: 'none'
      })
      return
    }
    
    wx.showLoading({
      title: '提交中...',
      mask: true
    })
    
    // 先上传图片，然后提交表单
    this.uploadImagesSequentially(0)
  },
  
  /**
   * 依次上传图片
   */
  uploadImagesSequentially(index) {
    if (index >= this.data.uploadImages.length) {
      // 所有图片上传完成，提交表单
      this.submitMessageForm()
      return
    }
    
    const that = this
    const imagePath = this.data.uploadImages[index]
    
    // 获取基础URL
    const baseUrl = app.globalData.baseUrl || ''
    const token = wx.getStorageSync('token') || ''
    
    console.log('开始上传图片:', index + 1, '/', this.data.uploadImages.length)
    
    // 上传图片到服务器
    wx.uploadFile({
      url: baseUrl + '/upload',
      filePath: imagePath,
      name: 'file',
      header: {
        'token': token
      },
      success(res) {
        try {
          console.log('上传响应:', res)
          const data = typeof res.data === 'string' ? JSON.parse(res.data) : res.data
          
          if (data.code === 0) {
            // 上传成功，替换本地路径为服务器路径
            const newImages = [...that.data.uploadImages]
            newImages[index] = data.data
            that.setData({
              uploadImages: newImages
            })
            console.log('上传成功:', data.data)
          } else {
            wx.hideLoading()
            wx.showToast({
              title: data.message || '图片上传失败',
              icon: 'none'
            })
            console.error('上传失败:', data)
            return
          }
        } catch (e) {
          wx.hideLoading()
          console.error('解析响应失败:', e, res.data)
          wx.showToast({
            title: '图片上传失败',
            icon: 'none'
          })
          return
        }
      },
      fail(err) {
        wx.hideLoading()
        console.error('上传请求失败:', err)
        wx.showToast({
          title: '图片上传失败',
          icon: 'none'
        })
        return
      },
      complete() {
        // 继续上传下一张图片
        that.uploadImagesSequentially(index + 1)
      }
    })
  },
  
  /**
   * 提交留言表单
   */
  submitMessageForm() {
    // 确保医生信息存在
    if (!this.data.doctorInfo || !this.data.doctorInfo.id) {
      wx.hideLoading()
      wx.showToast({
        title: '医生信息不完整，请重试',
        icon: 'none'
      })
      return
    }
    
    const params = {
      doctorId: this.data.doctorInfo.id,
      title: this.data.messageTitle,
      content: this.data.messageContent,
      image: this.data.uploadImages.join(',')
    }
    
    console.log('提交表单:', params)
    
    request.post('/student/doctor', params, true)
      .then(res => {
        wx.hideLoading()
        
        if (res.code === 0) {
          wx.showToast({
            title: '留言提交成功',
            icon: 'success'
          })
          
          // 返回上一页
          setTimeout(() => {
            wx.navigateBack()
          }, 1500)
        } else {
          wx.showToast({
            title: res.message || '留言提交失败',
            icon: 'none'
          })
        }
      })
      .catch(err => {
        wx.hideLoading()
        console.error('留言提交失败', err)
        wx.showToast({
          title: '留言提交失败',
          icon: 'none'
        })
      })
  },
  
  /**
   * 返回上一页
   */
  goBack() {
    wx.navigateBack()
  }
}) 